/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * $Id: BarraMenuCliente.java,v 1.6 2008/05/15 21:08:54 s2501a37 Exp $ 
 * Universidad de los Andes (Bogot� - Colombia)
 * Departamento de Ingenier�a de Sistemas y Computaci�n 
 * Licenciado bajo el esquema Academic Free License version 2.1 
 *
 * Proyecto Cupi2 (http://cupi2.uniandes.edu.co)
 * Ejercicio: n10_paint
 * Autor: Mario S�nchez - 27/09/2005 
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
 */
package co.edu.uniandes.sd.interfaz;

import java.awt.Component;
import java.awt.event.*;
import java.io.Serializable;

import javax.swing.*;

/**
 * Esta es la barra que contiene los men�s de la aplicaci�n
 */
public class BarraMenuCliente extends JMenuBar implements ActionListener, Serializable
{
    // -----------------------------------------------------------------
    // Constantes
    // -----------------------------------------------------------------

    /**
     * Constante que define el actionCommand del bot�n btnLogin
     */
    private static final String LOGIN = "Login";

    /**
     * Constante que define el actionCommand del bot�n btnSalir
     */
    private static final String SALIR = "Salir";

    /**
     * Constante que define el actionCommand del bot�n btnLogout
     */
    private static final String LOGOUT = "Logout";

    /**
     * Constante que define el actionCommand del bot�n btnReconexi�n
     */
    private static final String RECONEXION = "Reconexi�n";
    
    private static final String GUARDAR_ESTADO = "Guardar Estado";

    // -----------------------------------------------------------------
    // Atributos
    // -----------------------------------------------------------------

    /**
     * Es una referencia a la clase principal de la interfaz
     */
    private InterfazCliente principal;

    // -----------------------------------------------------------------
    // Atributos de la Interfaz
    // -----------------------------------------------------------------

    /**
     * El men� Login
     */
    private JMenu menuLogin;

    /**
     * La opci�n Iniciar Sesi�n del men� Login
     */
    private JMenuItem itemLogin;

    /**
     * La opci�n Cerrar Sesi�n del men� Login
     */
    private JMenuItem itemLogout;

    /**
     * La opci�n Registrarse del men� Login
     */
    private JMenuItem itemReconexion;

    /**
     * La opci�n Registrarse del men� Login
     */
    private JMenuItem itemSalir;
    
    private JMenu menuAcciones;
    
    private JMenuItem itemGuardarEstado;

    // -----------------------------------------------------------------
    // Constructores
    // -----------------------------------------------------------------

    /**
     * Construye la barra de men�
     * 
     * @param ip Es una referencia a la clase principal de la interfaz
     */
    public BarraMenuCliente( InterfazCliente ip )
    {
        principal = ip;

        menuLogin = new JMenu( "Menú" );
        menuLogin.setMnemonic( KeyEvent.VK_M );
        
        menuAcciones = new JMenu( "Acciones" );
        menuAcciones.setMnemonic( KeyEvent.VK_A );
        
        add( menuLogin );
        add( menuAcciones );

        itemLogin = new JMenuItem( "Iniciar Sesión" );
        itemLogin.setActionCommand( LOGIN );
        itemLogin.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_I, ActionEvent.CTRL_MASK ) );
        itemLogin.setMnemonic( KeyEvent.VK_I );
        itemLogin.addActionListener( this );
        menuLogin.add( itemLogin );

        itemLogout = new JMenuItem( "Cerrar Sesión" );
        itemLogout.setActionCommand( LOGOUT );
        itemLogout.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_S, ActionEvent.CTRL_MASK ) );
        itemLogout.setMnemonic( KeyEvent.VK_S );
        itemLogout.addActionListener( this );
        //menuLogin.add( itemLogout );

        menuLogin.addSeparator( );

        itemReconexion = new JMenuItem( "Reconectarse" );
        itemReconexion.setActionCommand( RECONEXION );
        itemReconexion.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_R, ActionEvent.CTRL_MASK ) );
        itemReconexion.setMnemonic( KeyEvent.VK_R );
        itemReconexion.addActionListener( this );
        //menuLogin.add( itemReconexion );

        menuLogin.addSeparator( );

        itemSalir = new JMenuItem( "Salir" );
        itemSalir.setActionCommand( SALIR );
        itemSalir.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_Q, ActionEvent.CTRL_MASK ) );
        itemSalir.setMnemonic( KeyEvent.VK_Q );
        itemSalir.addActionListener( this );
        menuLogin.add( itemSalir );
        
        itemGuardarEstado = new JMenuItem( "Guardar Estado" );
        itemGuardarEstado.setActionCommand( GUARDAR_ESTADO );
        itemGuardarEstado.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_S, ActionEvent.CTRL_MASK ) );
        itemGuardarEstado.setMnemonic( KeyEvent.VK_S );
        itemGuardarEstado.addActionListener( this );
        menuAcciones.add( itemGuardarEstado );

    }

    public void setEnabled( boolean param )
    {
        Component[] coleccion = getComponents( );
        for( int i = 0; i < coleccion.length; i++ )
        {
            Component temp = coleccion[ i ];
            temp.setEnabled( param );
        }
    }
    
    // -----------------------------------------------------------------
    // M�todos
    // -----------------------------------------------------------------

    /**
     * Ejecuta la acci�n que corresponde a la opci�n del men� que fue seleccionada
     * 
     * @param evento Es el evento de seleccionar una opci�n del men� - evento!=null
     */
    public void actionPerformed( ActionEvent evento )
    {
        String comando = evento.getActionCommand( );

        if( LOGIN.equals( comando ) )
        {
            principal.login();
        }
        else if( SALIR.equals( comando ) )
        {
            principal.salir( );
        }
        else if(GUARDAR_ESTADO.equals(comando))
        {
        	principal.guardarEstado();
        }
    }
}